<template>
<el-form :model="ruleForm2" :rules="rules2" ref="ruleForm2" label-position="left" label-width="0px" class="demo-ruleForm login-container">
    <h3 class="title">系统登录</h3>
    <el-form-item prop="account">
        <el-input type="text" v-model="ruleForm2.account" auto-complete="off" placeholder="账号"></el-input>
    </el-form-item>
    <el-form-item prop="checkPass">
        <el-input type="password" v-model="ruleForm2.checkPass" auto-complete="off" placeholder="密码"></el-input>
    </el-form-item>
    <el-checkbox v-model="checked" checked class="remember">记住密码</el-checkbox>
    <el-form-item style="width:100%;">
        <el-button type="primary" style="width:100%;" @click.native.prevent="handleSubmit2" :loading="logining">登录</el-button>
        <!--<el-button @click.native.prevent="handleReset2">重置</el-button>-->
    </el-form-item>
</el-form>
</template>

<script>
import {
    requestLogin,
    getMenuss
} from '../api/api';
import util from '../common/js/util';
import router from '../routes';
import Home from '@/views/Home.vue'
var _import = file => require('@/views' + file + '.vue')
//使用了vue-routerd的[Lazy Loading Routes
//

//import NProgress from 'nprogress'
export default {
    data() {
        return {
            logining: false,
            ruleForm2: {
                account: '',
                checkPass: ''
            },
            rules2: {
                account: [{
                        required: true,
                        message: '请输入账号',
                        trigger: 'blur'
                    },
                    //{ validator: validaePass }
                ],
                checkPass: [{
                        required: true,
                        message: '请输入密码',
                        trigger: 'blur'
                    },
                    //{ validator: validaePass2 }
                ]
            },
            checked: true,

        };
    },
    methods: {
        handleReset2() {
            this.$refs.ruleForm2.resetFields();
        },
        handleSubmit2(ev) {
            var _this = this;
            this.$refs.ruleForm2.validate((valid) => {
                if (valid) {
                    //_this.$router.replace('/table');
                    this.logining = true;
                    //NProgress.start();
                    var loginParams = {
                        name: this.ruleForm2.account,
                        paw: this.ruleForm2.checkPass
                    };
                    requestLogin(loginParams).then(res => {

                        let {
                            message,
                            success,
                            type,
                            data
                        } = res;
                        if (!success) {
                            this.$message({
                                message: message,
                                type: 'error'
                            });
                        } else {
                            let token = data.Token;
                            let nickName = data.NickName;
                            let expires_in=data.Expires_in;
                            sessionStorage.setItem('user', JSON.stringify(nickName));
                            _this.$store.commit("saveUserName", nickName);
                            _this.$store.commit("saveToken",token);

                            //参考别人，有更好方法转换，
                            // var curTime = new Date();
                            // var expiredate = new Date(curTime.setSeconds(curTime.getSeconds() + expires_in));
                            // _this.$store.commit("savetokenExpiresTime", expiredate);
                            // _this.$store.commit("saveRefreshTime", expiredate);
                            if (token != null) {
                                _this.getMenuList();
                            }

                            //_this.$router.addRoutes(RouterMap); // 动态添加可访问路由表

                        }
                    });
                } else {
                    console.log('error submit!!');
                    return false;
                }
            });
        },
        getMenuList() {
            let _this = this;

            getMenuss().then(res => {
                this.logining = false;
                let getRouter = res.data //后台拿到路由
                this.$store.commit("saveRouter", JSON.stringify(getRouter));
                getRouter = filterAsyncRouter(getRouter) //过滤路由

                // for (var i = 0; i < getRouter.length; i++) {

                //     router.options.routes.push(getRouter[i]);
                // }
                // router.addRoutes(getRouter) //动态添加路由
                _this.$router.replace(_this.$route.query.redirect ? _this.$route.query.redirect : "/");
                _this.$notify({
                    title: '成功',
                    type: "success",
                    message: "登录成功!",
                    duration: 3000
                });
            });
        },

    }
}

function filterAsyncRouter(asyncRouterMap) { //遍历后台传来的路由字符串，转换为组件对象

    const accessedRouters = asyncRouterMap.filter(route => {
        if (route.path) {
            if (route.path === '/') { //Layout组件特殊处理
                route.component = Home
            } else {
                route.component = _import(route.path);

            }
        }
        if (route.children && route.children.length) {
            route.children = filterAsyncRouter(route.children)
        }
        return true
    })

    return accessedRouters
}
</script>

<style lang="scss" scoped>
.login-container {
    /*box-shadow: 0 0px 8px 0 rgba(0, 0, 0, 0.06), 0 1px 0px 0 rgba(0, 0, 0, 0.02);*/
    -webkit-border-radius: 5px;
    border-radius: 5px;
    -moz-border-radius: 5px;
    background-clip: padding-box;
    margin: 180px auto;
    width: 350px;
    padding: 35px 35px 15px 35px;
    background: #fff;
    border: 1px solid #eaeaea;
    box-shadow: 0 0 25px #cac6c6;

    .title {
        margin: 0px auto 40px auto;
        text-align: center;
        color: #505458;
    }

    .remember {
        margin: 0px 0px 35px 0px;
    }
}
</style>
